﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 02/04/2014
 * Time: 01:28 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using Gestión_UTN.bo;

namespace Gestión_UTN.blimpl
{
    /// <summary>
    /// Description of profesorblimpl.
    /// </summary>
    public class profesorblimpl : Gestión_UTN.bl.profesorbl
    {
        private static Gestión_UTN.da.profesorda createProfesor = Gestión_UTN.factories.dafactory.createProfesor();
        private static Gestión_UTN.da.ciudadda createCiudad = Gestión_UTN.factories.dafactory.createCiudad();

        public profesorblimpl()
        {
        }

        public bool SaveProfesor(Gestión_UTN.bo.Profesorbo p)
        {
            bool ingresado = false;

            try
            {
                Gestión_UTN.Entities.Ciudad ciudad = (null != p)
                    ? createCiudad.FindCiudadByNombre(p.Ciudad) : null;

                ingresado = (null != ciudad)
                    ? createProfesor.SaveProfesor(p.Dni, p.Nombre, p.Apellido, p.FechaNac,
                        p.Direccion, ciudad.CodPostal, p.Tel_principal, p.Tel_auxiliar,
                        p.Mail_principal, p.Mail_auxiliar)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                ingresado = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ingresado = false;
                throw new exceptions.blexception(ex.Message);
            }

            return ingresado;
        }

        public bool DeleteProfesor(int dni)
        {
            bool eliminado = false;

            try
            {
                eliminado = (0 != dni) ? createProfesor.DeleteProfesor(dni) : false;
            }
            catch (exceptions.daexception ex)
            {
                eliminado = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                eliminado = false;
                throw new exceptions.blexception(ex.Message);
            }

            return eliminado;
        }

        public bool ModifyProfesor(int dni_anterior, Gestión_UTN.bo.Profesorbo p)
        {
            bool modificado = false;

            try
            {
                Gestión_UTN.Entities.Ciudad ciu = (null != p)
                    ? createCiudad.FindCiudadByNombre(p.Ciudad) : null;

                modificado = (0 != dni_anterior && null != ciu)
                    ? createProfesor.ModifyProfesor(dni_anterior, p.Dni, p.Nombre, p.Apellido,
                                                    p.FechaNac, p.Direccion, ciu.CodPostal,
                                                    p.Tel_principal, p.Tel_auxiliar,
                                                    p.Mail_principal, p.Mail_auxiliar)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                modificado = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                modificado = false;
                throw new exceptions.blexception(ex.Message);
            }

            return modificado;
        }

        public System.Data.DataTable FindAllProfesores()
        {
            DataTable tablaProfesores = null;

            try
            {
                tablaProfesores = createProfesor.FindAllProfesores();
            }
            catch (exceptions.daexception ex)
            {
                tablaProfesores = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                tablaProfesores = null;
                throw new exceptions.blexception(ex.Message);
            }

            return tablaProfesores;
        }

        public Gestión_UTN.bo.Profesorbo FindProfesorByDNI(int dni)
        {
            Profesorbo profesor = null;

            try
            {
                Gestión_UTN.Entities.Profesor pro = (0 != dni)
                    ? createProfesor.FindProfesorByDNI(dni) : null;

                Gestión_UTN.Entities.Ciudad ciu = (null != pro)
                    ? createCiudad.FindCiudadByCodPostal(pro.Ciu_codPostal)
                    : null;

                profesor = (null != ciu)
                    ? new Profesorbo(dni, pro.Nombre, pro.Apellido, pro.FechaNac,
                                     pro.Direccion, ciu.Nombre, pro.Tel_principal,
                                     pro.Tel_Auxiliar, pro.Mail_principal, pro.Mail_auxiliar)
                    : null;
            }
            catch (exceptions.daexception ex)
            {
                profesor = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                profesor = null;
                throw new exceptions.blexception(ex.Message);
            }

            return profesor;
        }
    }
}
